home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / perl / prlbkxmp.lha / ch6 / nfinger < prev    next >
Text File  |  1991-01-08  |  1KB  |  68 lines

  1. #!/usr/bin/perl
  2.  
  3. # Usage: finger [fingeroptions] [names]
  4.  
  5.     # Bind %ALIAS to the aliases database.
  6.  
  7. dbmopen(ALIAS,'/usr/lib/aliases',undef)
  8.     || die "can't dbmopen aliases";
  9.  
  10.     # Strip finger switches.
  11.  
  12. while ($ARGV[0] =~ /^-/) { 
  13.     push(@fingerargs, shift); 
  14.  
  15.     # Process user names.
  16.  
  17. while ($user = shift) { 
  18.     push(@finger, &resolve($user)); 
  19. }
  20.  
  21.     # Uniquify names.
  22.  
  23. @finger = grep(!$seen{$_}++, @finger);
  24.  
  25.     # And run finger.
  26.  
  27. exec 'finger', @fingerargs, @finger if @finger;
  28.  
  29. die "Couldn't run finger: $!\n";
  30.  
  31. ##############################################################
  32.  
  33. sub resolve {
  34.     local($home,$addr,$alias,@list);
  35.  
  36.     while ($addr = shift) {
  37.     if (defined $ALIAS{$addr."\0"}) {  # In dbm file.
  38.         chop($alias = $ALIAS{$addr."\0"});
  39.     }
  40.     else {
  41.         $home = (getpwnam($addr))[7];
  42.         if (defined($home) && -r "$home/.forward") {
  43.         open(FORWARD,"$home/.forward");
  44.         chop($alias = <FORWARD>);
  45.         close FORWARD;
  46.         }
  47.         else {
  48.         push(@list, $addr);         # Not aliased.
  49.         next;
  50.         } 
  51.     }
  52.  
  53.     $alias =~ s/"\|[^"]*",?//g;
  54.     $alias =~ s/^\s*(.*)\s*$/$1/;
  55.     if ($alias eq '') {             # Oops, only pipes.
  56.         push(@list, $addr);         # So back out alias.
  57.         next;
  58.     }
  59.     $alias =~ s/([^!]*)!(.*)/$2@$1/;  # A uucp addr?
  60.  
  61.     # Now call ourselves recursively.
  62.  
  63.     push(@list,&resolve(split(/[\s,]+/,$alias)));
  64.     } 
  65.     return @list;
  66. }
  67.